package com.wjl.shop.dao;

import com.wjl.shop.entity.Dealer;
import com.wjl.shop.entity.OperationAccountTable;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 经销商表(Dealer)表数据库访问层
 *
 * @author makejava
 * @since 2021-10-07 14:07:23
 */
public interface DealerDao {

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    Dealer queryById(Integer id);

    /**
     * 查询指定行数据
     *
     * @param offset 查询起始位置
     * @param limit  查询条数
     * @return 对象列表
     */
    List<Dealer> queryAllByLimit(@Param("offset") int offset, @Param("limit") int limit);


    /**
     * 通过实体作为筛选条件查询
     *
     * @param dealer 实例对象
     * @return 对象列表
     */
    List<Dealer> queryAll(Dealer dealer);

    /**
     * 新增数据
     *
     * @param dealer 实例对象
     * @return 影响行数
     */
    int insert(Dealer dealer);

    /**
     * 批量新增数据（MyBatis原生foreach方法）
     *
     * @param entities List<Dealer> 实例对象列表
     * @return 影响行数
     */
    int insertBatch(@Param("entities") List<Dealer> entities);

    /**
     * 批量新增或按主键更新数据（MyBatis原生foreach方法）
     *
     * @param entities List<Dealer> 实例对象列表
     * @return 影响行数
     */
    int insertOrUpdateBatch(@Param("entities") List<Dealer> entities);

    /**
     * 修改数据
     *
     * @param dealer 实例对象
     * @return 影响行数
     */
    int update(Dealer dealer);

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 影响行数
     */
    int deleteById(Integer id);

    /**
     * 经销商通过用户名、密码查询单条数据实现登陆
     *
     * @param username 用户名
     * @param password 密码
     * @return 实例对象
     */
    Dealer dealerLogin(@Param("username") String username,@Param("password") String password);

    /**
     * 通过经销商名称查询已关联的经销商
     * @param name
     * @return
     */
    List<Dealer> findByDealerName(String name);

    /**
     * 添加经销商总账号信息
     * @param dealer
     * @return
     */
    int insertBoss(Dealer dealer);

    /**
     * 查询经销商信息
     * @param dealer
     * @return 返回是否成功的信息和数据
     */
    List<Object> queryBoss(Dealer dealer);

    int updatePassword(Dealer dealer);

    /**
     * 通过用户名查询账户信息
     * @param username
     * @return
     */
    Dealer findAccountInfo(String username);


    /**
     * 查询密码是否一致
     * @param password
     * @return
     */
    Dealer checkPassword(@Param("username") String username,@Param("password") String password);

    /***
     * 更新密码
     * @param confirm
     * @return
     */
    Integer updatePassword(@Param("username") String username,@Param("confirm") String confirm);
    /**
     * 重置密码
     * @param dealer
     * @return是否成功
     */
    int rePassword(Dealer dealer);
}

